攻击者可滥用 CSS 代码收集用户敏感信息
翻译:360代码卫士团队
随着 CSS 语言的更新,CSS 代码已成为一款强大的可遭滥用的工具,追踪网站用户、从网页提取并窃取数据、收集从表单字段中输入的数据(包括密码),而且在某些情况下甚至暴露暗网用户的真实身份。
上个月出现了三个将 CSS 用作攻击向量的研究项目,展示了曾一度毫无恶意的语言如何可被滥用于攻击用户。
第一个研究项目来自 Jan Böhmer,主题为“被扭曲的样式表 (Crooked Style Sheets)”,它提供了一种非 JavaScript 分析解决方案,能够仅凭 CSS 代码通过页面元素追踪用户交互。
Böhmer 展示了如何在用户悬停在一个页面元素、点击链接、在输入字段中输入预设文本时追踪时间戳,以及他如何收集大量真实用户代理信息而避开受骗用户代理字符串提供的数据。
安全研究员 Dylan Ayrey 在上周末也发布了一篇研究报告,展示了攻击者如何滥用 CSS 窃取 CSRF(用户认证)口令。
Ayrey 说明的攻击仅适用于错误地将 CSRF 口令存储在多种 HTML 页面元素属性中的网站和 app,因此它的攻击范围有限。如果网站或 app 所有人能够找到一种无需将 CSRF 口令存储在页面源代码中的更安全的验证用户的方法,就能轻易打败这种攻击方法。
Ayrey 所述的攻击方法将 CSS 代码注入到网页中并通过 CSS 属性选择器猜测出每个 CSRF 口令字母。
攻击的执行时间约为10秒,而且甚至在无需内嵌式框架或远程服务器获得稳定流量(以免用户注意到异样)的情况下攻击也能起作用。这种方法说明将数据存储在本地 Service Workers 中,一旦 CSRF 口令被识别出来并完全重构后,攻击者能够检索到它。
不过 Ayrey 发布的研究仅抓住了皮毛。上个月,研究员 Mike Gualtieri 也使用了相同的技术,不过窃取的信息不止认证口令。
Gualtieri 展示了如何利用 CSS 属性选择器猜测留在 HTML 标签中的敏感信息,不仅包括窃取 CSRF 认证口令,还包括收集输入表单字段中的其它敏感信息如密码字符串。
Ayrey 和 Gualtieri 提供的方法都利用了 CSS 属性选择器,该机制能让开发人员查询具体属性的页面 HTML 标签并在它们的值上运行模式匹配。
例如,如下 CSS 代码会扫描页面找到所有的链接元素 (“a”)其中 “href” 属性中包含的(“*” 字符)”facebook” 字符串并将所有的这些链接标记为蓝色。
但这些查询可能变得更具侵入性,导致开发人员针对以某个具体字符串开头或结尾的属性。
这些查询可结合用于发动基本的字典暴力攻击并试图猜测每个属性的起始字母,并将识别出的字母添加到修订后的模式匹配中,从而导致攻击者猜测到第二个、第三个字母,以此类推。
这种方法的目的是,当恶意 CSS 代码找到正确的分区/完整选择器时,向攻击者的服务器发出一个 HTTP 请求。
攻击者仅需要遍历服务器404错误并过滤出 CSS 属性筛选碰撞的结果即可。
然后将字符串整合到真实的数据中:
Ayrey 和 Gualtieri 提出了执行这些攻击的不同方法。Ayrey 依靠的是猜测末尾字符串字母,每次猜测一个字母;而 Gualtieri 采取了重构字符串的捷径,在多个片段中猜测该字符串并在猜测结束后重构。
这两种方法都产生了效果。Ayrey 的方法虽然噪音多,但可很轻松地进行自动化;而Gualtieri 的方法虽然快(也可自动化)但在某些情况下需要依靠人力来把最终字符串拼接在一起。
Gualtieri 将这种技术命名为 “CSS Exfil”。但实际上这种方法并非完美无瑕,它尽可窃取在加载时间从页面上找到的 HTML 属性,而无法在页面首次加载后动态注入的代码中查找。Gualtieri 指出这并非一个主要问题,表示研究中提到了攻击者可使用的多种权变措施。
读者如有兴趣了解关于 “CSS Exfil” 攻击的信息,可抽时间读一读 Ayrey 和 Gualtieri的研究论文,它们全面介绍了关于该攻击的案例。
可从两个层面防御 CSS Exfil 攻击。首先,网站和 web app 作者可部署“内容安全策略 (CSP)”防护措施,阻止攻击者从外部来源加载 CSS 代码。
其次,终端用户还可以安装 Gualtieri 提供的火狐或 Chrome 扩展,检测研究中提到的所有 CSS Exfil 攻击类型并在攻击执行前覆写恶意代码。
Gualtieri 还提供了网页供读者检测是否已遭 CSS Exfil 攻击。
本文由360代码卫士编译,不代表360观点,转载请注明 “转自360代码卫士www.codesafe.cn”。
原文链接:
https://www.bleepingcomputer.com/news/security/css-code-can-be-abused-to-collect-sensitive-user-data/